#include <iostream>
#include <typeinfo>
using namespace std;

//类模板与继承
//当类模板碰到继承时，需要注意一下几点：
//当子类继承的父类是一个类模板时，子类在声明的时候，要指定出父类中T的类型
//如果不指定，编译器无法给子类分配内存
//如果想灵活指定出父类中T的类型，子类也需变为类模板
template<typename T>
class Base {
public:
    T t;
};

//class Son:public Base{//错误，c++编译需要给子类分配内存，必须知道父类中T的类型才可以向下继承
//
//};

class Son : public Base<int>{

};

template<typename T,typename C>
class Son2:public Base<C>{
public:
    T o;
    Son2(){
        cout<<"T:"<< typeid(T).name()<<endl;
        cout<<"C:"<< typeid(C).name()<<endl;
    }
};
void test1(){
    Son son;
    son.t=10;
    cout<<"son:t="<<son.t<<endl;
}
void test2(){
    Son2<int,char> son2;
    son2.o=10;
    son2.t='a';
}
int main() {
    test1();
    test2();
    return 0;
}